# 第十七讲 设计游戏开始画面并添加按钮,没有功能

import pygame  # 导入pygame模块
import sys  # 导入sys模块

pygame.init()  # 游戏初始化
screen = pygame.display.set_mode((640, 480))  # 设置游戏窗口大小
pygame.display.set_caption("Eason快跑")  # 设置游戏窗口标题
interface = pygame.image.load("image/interface.png")  # 读取游戏的首页图片到background变量中

upImageFilename = "image/button1.png"  # 读取按钮正常状态的图片
downImageFilename = "image/button2.png"  # 读取按钮按下状态的图片


class Button(object):  # 定义按钮类
    def __init__(self, upimage, downimage, position):
        '''初始化按钮类，参数包括正常状态图片、按下的图片和坐标元组'''
        self.image_up = pygame.image.load(upimage).convert_alpha()
        # 读取按钮正常图片为按钮类的抬起状态
        self.image_down = pygame.image.load(downimage).convert_alpha()
        # 读取按钮按下图片为按钮类的按下状态
        self.position = position  # 坐标参数为按钮类的参数

    def is_over(self):  # 定义鼠标移动到按钮上的效果
        point_x, point_y = pygame.mouse.get_pos()  # 获取鼠标的坐标
        x, y = self.position  # 将坐标元组赋值给x和y
        w, h = self.image_up.get_size()  # 获取正常按钮的宽度和高度
        in_x = x < point_x < x + w  # 定义鼠标移动到按钮上以后的x坐标
        in_y = y < point_y < y + h  # 定义鼠标移动到按钮上以后的y坐标
        return in_x and in_y  # 返回in_x和in_y的值

    def render(self):  # 将按钮动画绘制到屏幕上
        x, y = self.position
        w, h = self.image_up.get_size()

        if self.is_over():
            screen.blit(self.image_down, (x - w / 2, y - h / 2))
        else:
            screen.blit(self.image_up, (x - w / 2, y - h / 2))


button = Button(upImageFilename, downImageFilename, (320, 450))
# 按钮继承按钮类，三个参数分别是按钮正常的图片、按钮按下的图片、按钮的坐标元组

while True:  # 进入游戏主循环
    for event in pygame.event.get():
        # 使用event.get()方法只能检测按键单次动作，如果希望按下按键有持续动作，需要key.get_pressed()方法
        if event.type == pygame.QUIT:  # 如果监听到键盘的动作等于pygame的退出
            sys.exit()  # 退出游戏窗口

    screen.blit(interface, (0, 0))  # 绘制背景
    button.render()  # 调用按钮效果
    pygame.display.flip()  # 绘制窗口
